package controllers;

import entities.LegLEGAJO;
import java.util.List;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.zkoss.zul.Button;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
import render.LegajosRenderer;

public class LegajosViewController extends GenericForwardComposer {
    
    Window winEdit;
    
    Listbox legajoListBox;
    Button cleanButton;
    Button editarButton;
    Textbox filtroLegajo;
    Textbox filtroApellido;
    Textbox filtroNombre;
    Textbox filtroTipo;
    
    LegLEGAJO legajoToEdit;
    
    Textbox txtCodigo;
    Textbox txtApellido;
    Textbox txtNombre;
    Textbox txtTipo;
    Textbox txtDocumento;
    Datebox txtNacimiento;
    Textbox txtCuil;
    Textbox txtDomicilio;
    Textbox txtNumeroCalle;
    Textbox txtLocalidad;
    
    @Override
    public void doAfterCompose (Component comp) throws Exception {
        super.doAfterCompose(comp);
        // set models and render to listbox after composed
        legajoListBox.setModel(getLegajosModel());
        legajoListBox.setItemRenderer(new LegajosRenderer());
    }

    public ListModel getLegajosModel () {
        List legajos;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select c from LegLEGAJO as c");
        legajos = q.getResultList();
        return new ListModelList(legajos);
    }
    
    public ListModel getLegajosByLegajo () {
        List legajos;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select c from LegLEGAJO as c WHERE c.legajo LIKE :legajo AND c.apellido LIKE :apellido AND c.nombre LIKE :nombre AND c.tipoLegajo LIKE :tipo ORDER By c.legajo ASC");
        q.setParameter("legajo", "%" + filtroLegajo.getValue() + "%");
        q.setParameter("apellido", "%" + filtroApellido.getValue() + "%");
        q.setParameter("nombre", "%" + filtroNombre.getValue() + "%");
        q.setParameter("tipo", "%" + filtroTipo.getValue() + "%");
        legajos = q.getResultList();
        return new ListModelList(legajos);
    }
    
    public ListModel getLegajosByApellido () {
        List legajos;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select c from LegLEGAJO as c WHERE c.legajo LIKE :legajo AND c.apellido LIKE :apellido AND c.nombre LIKE :nombre AND c.tipoLegajo LIKE :tipo ORDER By c.apellido ASC");
        q.setParameter("legajo", "%" + filtroLegajo.getValue() + "%");
        q.setParameter("apellido", "%" + filtroApellido.getValue() + "%");
        q.setParameter("nombre", "%" + filtroNombre.getValue() + "%");
        q.setParameter("tipo", "%" + filtroTipo.getValue() + "%");
        legajos = q.getResultList();
        return new ListModelList(legajos);
    }
    
    public ListModel getLegajosByNombre () {
        List legajos;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select c from LegLEGAJO as c WHERE c.legajo LIKE :legajo AND c.apellido LIKE :apellido AND c.nombre LIKE :nombre AND c.tipoLegajo LIKE :tipo ORDER By c.nombre ASC");
        q.setParameter("legajo", "%" + filtroLegajo.getValue() + "%");
        q.setParameter("apellido", "%" + filtroApellido.getValue() + "%");
        q.setParameter("nombre", "%" + filtroNombre.getValue() + "%");
        q.setParameter("tipo", "%" + filtroTipo.getValue() + "%");
        legajos = q.getResultList();
        return new ListModelList(legajos);
    }
    
    public ListModel getLegajosByTipo () {
        List legajos;
        EntityManagerFactory emf;
        emf = Persistence.createEntityManagerFactory("ConarpesaWebAppPU");
        EntityManager em = emf.createEntityManager();
        javax.persistence.Query q = em.createQuery("select c from LegLEGAJO as c WHERE c.legajo LIKE :legajo AND c.apellido LIKE :apellido AND c.nombre LIKE :nombre AND c.tipoLegajo LIKE :tipo ORDER By c.tipoLegajo ASC");
        q.setParameter("legajo", "%" + filtroLegajo.getValue() + "%");
        q.setParameter("apellido", "%" + filtroApellido.getValue() + "%");
        q.setParameter("nombre", "%" + filtroNombre.getValue() + "%");
        q.setParameter("tipo", "%" + filtroTipo.getValue() + "%");
        legajos = q.getResultList();
        return new ListModelList(legajos);
    }
    
    public void onChange$filtroLegajo() {
        legajoListBox.setModel(getLegajosByLegajo());
        legajoListBox.setItemRenderer(new LegajosRenderer());
    }
    
    public void onChange$filtroApellido() {
        legajoListBox.setModel(getLegajosByApellido());
        legajoListBox.setItemRenderer(new LegajosRenderer());
    }
    
    public void onChange$filtroNombre() {
        legajoListBox.setModel(getLegajosByNombre());
        legajoListBox.setItemRenderer(new LegajosRenderer());
    }
    
    public void onChange$filtroTipo() {
        legajoListBox.setModel(getLegajosByTipo());
        legajoListBox.setItemRenderer(new LegajosRenderer());
    }
    
    public void onClick$cleanButton() {
        filtroLegajo.setValue("");
        filtroApellido.setValue("");
        filtroNombre.setValue("");
        filtroTipo.setValue("");
        legajoListBox.setModel(getLegajosModel());
        legajoListBox.setItemRenderer(new LegajosRenderer());
    }
    
    public void onClick$editarButton() {
        ListModel legajosModel = legajoListBox.getModel();
        legajoToEdit = (LegLEGAJO) legajosModel.getElementAt(legajoListBox.getSelectedIndex());
        txtCodigo.setValue(legajoToEdit.getLegajo());
        txtApellido.setValue(legajoToEdit.getApellido());
        txtNombre.setValue(legajoToEdit.getNombre());
        txtTipo.setValue(legajoToEdit.getTipoLegajo());
        txtDocumento.setValue(legajoToEdit.getDocumentoNumero());
        txtNacimiento.setValue(legajoToEdit.getFechaNacimiento());
        txtCuil.setValue(legajoToEdit.getCuil());
        txtDomicilio.setValue(legajoToEdit.getCalle());
        txtNumeroCalle.setValue(legajoToEdit.getNumero());
        txtLocalidad.setValue(legajoToEdit.getLocalidad());
        winEdit.doModal();
        winEdit.setVisible(true);
    }
}